/**
 * 普通业务模块示例
 */
define(['Util',
        'list',
        'form',
        'dialog',
        'tab',
        'loading',
        'selectTree',
        'simpleTree',
        'select',
        '../common/getPath',
        'text!tpl/userRole/userRoleList.tpl',
        'text!tpl/userRole/userInfoTable.tpl',
        'text!tpl/userRole/assUserRole.tpl',
    ],
    function(Util, List, Form, Dialog, Tab, Loading, SelectTree, SimpleTree, Select, AjaxPath, userRoleListTpl, userInfotable, userRoleAss) {
        require(['style!css/style.css']);
        var $el = null;

        var _indexModule = null,
            list = null,
            dialog = null,
            tab = null,
            tplId = null,
            handLoading = null,
            loadingConfig = null,
            userOrganTreeSelect = null,
            userRoleAssSelect = null,
            userRoleOrganTree = null,
            userRoleData = null;
        var initialize = function(indexModule, options, tabItem) {
            $el = $(userRoleListTpl);
            _indexModule = indexModule;

            // 事件--点击切换tab后事件回调
            $(tabItem).on("tabActive", function() {
                tabItem.show(true); // 刷新表单
            });

            tab = tabItem;
            createLoading();
            tplId = options.menuId;

            // 业务相关代码
            eventInit();
            this.content = $el;

            // initSelect();
            getUserRoleTypeTab();
        };

        var eventInit = function (){
            //页面除dialog按钮功能
            $el.on('click', '.userRoleBtnSearch', search);
            $el.on('click', '.userRoleBtnReset', searchRest);

            $el.on('click', '#userRoleAssBtn', createUserRoleAssDialog);
            $el.on('click', '#userRoleCancelBtn', createUserRoleAssDialog);

            $el.on('click', '.userRoleTypeTab li', bindUserRoleTypeTab);

            $el.on('click', '.userRoleBtn button', listUserRoleBtn);

            $('#tabList li.' + tplId).on('click', tabActive);
        }

        var tabActive = function() {
            search();
        }

        var search = function(e, pageIndex) {
            var data = Form.serialize($('.searchUserRoleForm', $el));
            data.limit = 10;
            data.page = 1;

            if($(".userRoleTypeTab li.actived").attr("type")==="0"){
                data.roleIds = $(".userRoleTypeTab li.actived").attr("data");
            }else{
                data.roleId = $(".userRoleTypeTab li.actived").attr("data");
            }

            list.search(data, pageIndex ? pageIndex : "");
        }

        var searchRest = function(){
            $("input[name=userAccount]",$el).val("");
            $("input[name=email]",$el).val("");
            // userOrganTreeSelect.set([]);
            $(".userRoleListContainer").find("a").removeClass("theSort");

            search();
        }

        var initSelect = function(){
            var config = {
                el:$('#userRoleSelect', $el), 
                inputClassName:'',       //给所选input框添加类名，值默认为bg-tree 
                className:'treeClassName',    //弹出树面板树上添加的类名
                label:'所属组织',     //所选input框左侧label的名称
                check:true,         //false时为单选，true时为多选
                async:{
                    enable:false  //是否启用异步树
                },
                name:'aaaa',      //所选input框兄弟元素隐藏域的名称，用于存储用户选中的值
                text:'',            //组件初始化时，要显示在文本域中的内容
                value:'',           //组件初始化时，要显示在隐藏域中的value值
                textField:'name',  //用户从树上选中节点时，要显示在文本域中的内容,默认为name值
                valueField:'id',   //用户从树上选中节点时，要显示在隐藏域中的内容
                expandAll:true,     //默认是否展开所有节点
                childNodeOnly:false, //true仅仅选择子节点到文本域；false连同父级节点一同选择到文本域
                showIcon:false,
                // checkAllNodes:true,    //在是否显示复选框“全选”
                url:'data/selectTree.json'
                // url: AjaxPath.project + '/organs/findTrees'
            }
            userOrganTreeSelect = new SelectTree(config);
        }

        var listInit = function(){
            var config = {
                el: $('.userRoleListContainer', $el),
                ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                    method:'GET'
                },
                field: {
                    boxType: 'checkbox',
                    key: 'id',
                    items: [
                    {
                        text: '姓名',
                        name: 'userName',
                        className: 'w90',
                        sorting:1,
                        width:100,
                        click: function (e, val,item) {
                            // console.log(e,item)
                            creatUserInfoDialog(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html(); 
                            return '<a href="javascript:;" class="" style="line-height:36px;display:block;outline:none;">' + val + '</a>';
                        }
                    },
                    {
                        text: '用户名',
                        name: 'userAccount',
                        className: 'w90',
                        sorting:1,
                        width:150,
                        click: function (e, val,item) {
                            // console.log(e,item)
                            creatUserInfoDialog(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html(); 
                            return '<a href="javascript:;" class="" style="line-height:36px;display:block;outline:none;">' + val + '</a>';
                        }
                    },
                    {
                        text: '手机号',
                        name: 'phone',
                        className: 'w90',
                        sorting:1,
                        width:100,
                        click:function(e, val, item){

                        },
                        render: function (item, val) {
                            return val;
                        }
                    },
                    {
                        text: '邮箱',
                        title: 'email',
                        name: 'email',
                        className: 'w90',
                        sorting:1,
                        width:200,
                        render: function (item, val) {
                            return val;
                        }
                    },
                    {
                        text: '操作',
                        title: '',
                        name: '',
                        className: 'w90',
                        render: function (item, val) {
                            var str = '';  
                            $(userRoleData).each(function(index, items){
                                var active = "";
                                if(item.sysUsersRoles){
                                    for(var i=0; i<item.sysUsersRoles.length; i++){
                                        if(items.key === item.sysUsersRoles[i].sysRoles.roleId && items.value === item.sysUsersRoles[i].sysRoles.roleDesc){
                                            active = 't-btn-green';
                                        } 
                                    }
                                }
                                
                                str += '<button class="t-btn t-btn-blue '+ active +' t-btn-xs ml-10" data="'+ items.key +'"><a style="color:#fff">'+ items.value +'</a></button>';
                            })    

                            return '<div class="fn-center userRoleBtn">'+ str +'</div>';
                        }
                    }]
                },
                page: {
                    customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                    perPage: 10, //默认每页显示多少条记录
                    total: true
                },
                data: {
                    url: AjaxPath.auth + "/userRoles"
                    // url:"../../../data/list1.json"
                }
            };
            list = new List(config);
            // list.search();
        }

        var getUserRoleTypeTab = function(){
            Util.ajax.getJson(AjaxPath.project + "/dropdown?modual=user&type=role", {}, function(result, isok) {
                if(result.returnCode==="0000"){
                    userRoleData = result.beans;
                    var tabStr = "";
                    $(result.beans).each(function(index, item) {
                        tabStr += '<li data="'+ item.key +'"><a href="javascript:;">'+ item.value +'</a></li>'
                    })
                    $(".userRoleTypeTab").append(tabStr);
                    // $(".userRoleListContainer li:first").addClass("actived");
                    var data = {};
                    data.roleIds = $(".userRoleTypeTab li.actived").attr("data");
                    listInit();
                    list.search(data);
                }
            })
        };

        var bindUserRoleTypeTab = function(){
            $(this).addClass('actived').siblings().removeClass('actived');
            search();
        }

        var userRoleAssSelectFun = function(type){
            userRoleAssSelect = new Select({
                el:$("#userRoleAss"),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                }, 
                label:'<i style="color:red;padding:2px;"></i>' + (type===0 ? '要分配的角色:' : '要取消的角色:'), //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'roleId',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"", //设置最顶部option的text属性
                value:0,//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: userRoleData,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){
                    console.log("用户");
                } //select的DOM结构加载完后执行
                //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
            });
            // userRoleAssSelect.setValue(); 
        }

        var createUserRoleAssDialog = function(e){
            
            var nodes = list.getCheckedRows();
            var checkUserData = [];

            var type = null;
            if(e.target.id === 'userRoleAssBtn'){
                type = 0;
            }else{
                type = 1;
            }

            if(nodes.length < 1) {
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">'+ (type===0 ? "请选择至少一条数据进行分配！" : "请选择至少一条数据进行取消！") +'</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                dialog = new Dialog(config);
                return;
            } else {
                for(var i = 0; i < nodes.length; i++) {
                    checkUserData.push(nodes[i].userId);
                }
                // checkUserData = checkUserData.substring(0,checkUserData.length-1);
            }

            var data = {};
                data.formClassName = "detailUserRoleAssForm";
                data.selectName = "userRoleAss";
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: (type===0 ? '向批量选中的用户分配角色' : '取消批量选中的用户的角色'), //对话框标题，
                content: Util.hdb.compile(userRoleAss)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() { 
                    console.log('点击了确定按钮');
                    
                    createUserRoleAss(e, type, checkUserData);
                    return true;
                }, 
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 300, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                    console.log('对话框打开时执行。');
                    userRoleAssSelectFun(type);                   
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
        }

        var createUserRoleAss = function(e, type, datas){
            handLoading = new Loading(loadingConfig);
            var config = null;
            var data = Form.serialize($('.detailUserRoleAssForm'));
            Util.ajax.postJson(AjaxPath.auth + '/userRoles' + (type === 0 ? '/batchInsert/' : '/batchDelete/') +data.roleId, JSON.stringify(datas), function(result, isok) {
                if(result.returnCode==="0000") {
                    handLoading.destroy();
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+ (type === 0 ? "批量分配成功" : "批量取消成功") +'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                    search(e, list.pageIndex);
                } else {
                    handLoading.destroy();
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            });
        }

        var creatUserInfoDialog = function(e, item){
            creatZtree(item.data.organId, item.data.userId);
        }

        var creatZtree = function(organId, userId){
            Util.ajax.getJson( AjaxPath.auth + "/organs/findUserRoleTree/"+organId +'/' +userId, {}, function(result, isok) {
                new Dialog({
                    mode: 'normal', 
                    title: '用户信息', 
                    content: Util.hdb.compile(userInfotable)(result.beans.SysUsers), 
                    cancel: function() { 
                        return true;
                    },
                    cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                    width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 300, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                    maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                    maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                    padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                    align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                    skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                    modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                    backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                    zIndex:990   // 对话框的z-index值，默认是1024。
                });


                var setting = {
                    treeId: "userRoleOrganTree",      //zTree 的唯一标识，初始化后，等于 用户定义的容器的 id 属性值
                    async:{
                        enable: false
                    },
                    view:{
                        showIcon: false,     //是否显示节点图标，默认值为true
                        showLine: true,     //是否显示节点之间的连线，默认值为false
                    }
                }
                userRoleOrganTree = new SimpleTree.tierTree($('#userRoleOrganTree'), result.beans.orgList, setting);
                userRoleOrganTree.expandAll(true);
            });
        }

        var listUserRoleBtn = function(e){
            handLoading = new Loading(loadingConfig);
            $(".userRoleListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td").click();
            $(".userRoleListContainer .sn-list-show table tbody tr").eq(e.currentTarget.parentNode.parentNode.parentNode.rowIndex).find('td').click();

            var datas = list.getCheckedRows();

            var type = null;
            if($(this).hasClass("t-btn-green")){
                type = 1;
            }else{
                type = 0;
            }

            Util.ajax.getJson(AjaxPath.auth + '/userRoles' + (type === 0 ? '/insert/' : '/delete/') + datas[0].userId + '/' + $(this).attr("data"), {}, function(result, isok) {
                if(result.returnCode==="0000") {
                    handLoading.destroy();
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+ (type === 0 ? "分配成功" : "取消成功") +'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                    search(e, list.pageIndex);
                } else {
                    handLoading.destroy();
                    config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    dialog = new Dialog(config);
                }
            });
            
        }

        var createLoading = function() {
            loadingConfig = {
                el: 'body', //组件要绑定的容器，默认为body（此项可不配置或留空）
                className: 'loading', //组件外围的className
                position: 'center', //提示信息位置，顶部top|默认center中央
                width: '300', //loading的宽度,非必须，默认300
                height: 'auto', //loading的宽度,非必须，默认auto
                mask: 1, //是否显示遮罩， 0不显示|默认1显示
                animate: 1, //是否显示动画效果， 0不显示|默认1显示
                mode: 'layer', //展示方式 loadingLine线条方式|默认layer弹层方式
                text: '加载中...', //提示文字，默认 加载中...
                icon: 'dotCycle', //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
            }
        }

        return initialize;
    });